From 14dc41d85593dbba361d9302a320c4078450b73f Mon Sep 17 00:00:00 2001 From: Sebastian Keller Date: Mon, 14 Sep 2026 04:00:50 +0200 Subject: [PATCH] popupMenu: Fix submenu signal connector leak Neither `PopupMenuBase` nor the `PopupSubMenu` that is used as `menu` of `PopupSubMenuMenuItem` is destroyable, so the connection needs to be manually disconnected when the `PopupSubMenu` is destroyed, otherwise the signal tracker and with it the `PopupSubMenu` is being leaked. Part-of: (cherry picked from commit 4a0d2e424a4b37ab6264e871a92044c8b83cc5fe) --- js/ui/popupMenu.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/js/ui/popupMenu.js b/js/ui/popupMenu.js index 7dce5b661..3ab4a9ee4 100644 --- a/js/ui/popupMenu.js +++ b/js/ui/popupMenu.js @@ -902,8 +902,10 @@ export class PopupMenuBase extends Signals.EventEmitter { this.box.insert_child_below(menuItem.menu.actor, beforeItem); this._connectItemSignals(menuItem); - menuItem.menu.connectObject('active-changed', - this._subMenuActiveChanged.bind(this), this); + menuItem.menu.connectObject( + 'active-changed', this._subMenuActiveChanged.bind(this), + 'destroy', () => menuItem.menu.disconnectObject(this), + this); this.connectObject('menu-closed', () => { menuItem.menu.close(BoxPointer.PopupAnimation.NONE); }, menuItem); -- 2.39.5